home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Camelot / Camelot 043 (1989-06)(Swedish User Group of Amiga)(SE)(PD)[WB].zip / Camelot 043 (1989-06)(Swedish User Group of Amiga)(SE)(PD)[WB].adf / printfx / stoi.c < prev   
C/C++ Source or Header  |  1989-06-08  |  791b  |  37 lines

  1. /* 01-12-86 by D.Reisig 1151AV 10 */
  2.  
  3. stoi(cp,retval) /* convert bin, oct, dec or hex string */
  4. register char *cp;
  5. int *retval;
  6. {
  7. register int value, base, neg=0;
  8. register char digit;
  9. char *hold;
  10.   hold=cp;
  11.   for (base=0;!base;++cp){
  12.     if (*cp=='$') base=16;
  13.     else if (*cp=='@') base=8;
  14.     else if (*cp=='%') base=2;
  15.     else if (*cp=='-') neg=1;
  16.     else if ((*cp!='+')&&(*cp!='=')&&(*cp!='\t')&&(*cp!=' ')){
  17.       --cp;
  18.       base=10;
  19.     }
  20.   }
  21.   for (value=0;;++cp){
  22.     digit=*cp;
  23.     if (digit>'9'){
  24.       digit&=0x5f;
  25.       if (digit<'A') break; 
  26.       digit-=('A'-':');
  27.     }
  28.     digit-='0';
  29.     if ((digit<0)||(digit>=base)) break;
  30.     value=value*base+digit;
  31.   }
  32.   if (neg) *retval=-value;
  33.   else *retval=value;
  34.   return(cp-hold);   /* return length of string involved  */
  35. }
  36.  
  37.